package py.com.sole.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import py.com.sole.dao.CiudadDao;
import py.com.sole.dao.DaoFactory;
import py.com.sole.model.Ciudad;

public class CiudadImpl implements CiudadDao {

  EntityManager em = DaoFactory.getEm();

  public void addCiudad(Ciudad ciudad) {
    try {
      em.getTransaction().begin();
      em.persist(ciudad);
      em.getTransaction().commit();
    } catch (Exception e) {
      // System.out.println("Error al intentar persistir "+e);
      e.printStackTrace();
    }

  }

  public void deleteCiudad(int id) {
    try {
      em.getTransaction().begin();
      em.remove(this.getCiudadById(id));
      em.getTransaction().commit();
    } catch (Exception e) {

    }
  }

  public void updateCiudad(Ciudad ciudad) {
    try {
      em.getTransaction().begin();
      em.merge(this.getCiudadById(ciudad.getId()));
      em.getTransaction().commit();
    } catch (Exception e) {
      // TODO: handle exception
    }

  }

  public Ciudad getCiudadById(int id) {

    return (Ciudad) em.createQuery(
      "SELECT c FROM Ciudad c where c.id = " + id).getSingleResult();
  }

  @SuppressWarnings(value = "all")
  public List<Ciudad> getCiudades() {
    return em.createQuery("SELECT c FROM Ciudad c WHERE c.activo=TRUE").getResultList();
  }

  @Override
  public Ciudad getCiudadByName(String value) {
    try {
      Query q = em.createNamedQuery("Ciudad.findByDescripcion");
      q.setParameter("descripcion", value);
      return (Ciudad) q.getSingleResult();
    } catch (Exception e) {
      return null;
    }
  }

}
